/**
 *Copyright (c) 2024 watereyes
 * workflow is licensed under Mulan PubL v2.
 * You can use this software according to the terms and conditions of the Mulan
 * PubL v2.
 * You may obtain a copy of Mulan PubL v2 at:
 *          http://license.coscl.org.cn/MulanPubL-2.0
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PubL v2 for more details.
 */
package com.koron.workflow.workflowDesign.mapper;

import com.koron.workflow.workflowDesign.bean.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface ProcessMapper {
	
	/**
	 * 
	 * @param code
	 * @param setCode
	 * @return
	 */
	ProcessBean queryByCodeAndSetCode(@Param("code") String code, @Param("setCode") String setCode);

	/**
	 * 
	 * @param code
	 * @param setId
	 * @return
	 */
    ProcessBean queryByCodeAndSetId(@Param("code") String code, @Param("setId") String setId);

    /**
     * 根据id查询流程模板
     *
     * @return
     */
    ProcessBean queryProcessById(String id);

    /**
     * 修改流程
     *
     * @param process
     * @return
     */
    int update(ProcessBean process);

    /**
     * 根据条件分页查询 模版
     *
     * @param administratorId 查询系统管理员ID
     * @param appId           应用ID
     * @param setId           所属模板组ID
     * @param code            模板编号
     * @param name            模板名称
     * @param status          状态 0:停用，1:启用
     * @param page
     * @param pageSize
     * @return
     */
    List<ProcessQueryBean> queryForList(@Param("administratorId") String administratorId, @Param("appId") String appId,
                                        @Param("setId") String setId, @Param("code") String code,
                                        @Param("name") String name, @Param("status") Integer status,
                                        @Param("page") Integer page, @Param("pageSize") Integer pageSize);

    /**
     * 根据条件统计查询 模版
     *
     * @param administratorId 查询系统管理员ID
     * @param appId           应用ID
     * @param setId           所属模板组ID
     * @param code            模板编号
     * @param name            模板名称
     * @param status          状态 0:停用，1:启用
     * @return
     */
    Integer countQueryForList(@Param("administratorId") String administratorId, @Param("appId") String appId,
                              @Param("setId") String setId, @Param("code") String code,
                              @Param("name") String name, @Param("status") Integer status);

    /**
     * 根据id查询模版
     *
     * @param id
     * @return
     */
    ProcessQueryBean queryForObject(String id);

    /**
     * 新增 模版管理
     *
     * @param bean
     * @return
     */
    Integer insert(ProcessUpdateBean bean);

    /**
     * 批量新增 模版管理
     *
     * @param list
     * @return
     */
    Integer insertBatch(@Param("list") List<ProcessUpdateBean> list);

    /**
     * 修改 模版管理
     *
     * @param bean
     * @return
     */
    Integer updateProcess(ProcessUpdateBean bean);

    /**
     * 根据ID删除 模版管理
     *
     * @param id
     * @return
     */
    Integer delete(String id);

    /**
     * 根据ID复制 模版管理
     *
     * @param copyId 要进行赋值的模版id
     * @param id     复制后的模版id
     * @param name   复制后的模版名称
     * @param code   复制后的模版编号
     * @return
     */
    Integer copyProcess(@Param("copyId") String copyId, @Param("id") String id,
                        @Param("code") String code, @Param("name") String name);

    /**
     * 根据系统管理员ID 查询用户有设计权限的模版组
     *
     * @param administratorId
     * @return
     */
    List<Map> queryDesignProcessList(String administratorId);


    /**
     * 根据code 统计个数
     *
     * @param code
     * @param setId 模版组id
     * @return
     */
    Integer verifyCode(@Param("code") String code, @Param("setId") String setId, @Param("processId") String processId);

    /**
     * 根据appid,setid,code获取流程id
     *
     * @param appCode
     * @param setCode
     * @param processCode
     * @return
     */
    ProcessBean getProcess(@Param("appCode") String appCode, @Param("setCode") String setCode, @Param("processCode") String processCode);

    ProcessBean queryByCode(@Param("processCode") String processCode);

    /**
     * 工作流列表
     *
     * @param billId      业务单据编号，为空查所有单据
     * @param title       标题，不为空模糊搜索
     * @param startDate   开始日期
     * @param endDate     结束日期
     * @param typeFlag_1  1我发起的
     * @param typeFlag_2  2我待审的
     * @param typeFlag_3  3参与的
     * @param typeFlag_4  4我已沟通的
     * @param typeFlag_5  5我已办的
     * @param status_1    状态：1未结束
     * @param status_2    状态：2已结束
     * @param operator    操作人登陆帐号
     * @param page        第几页
     * @param pageSize    每页条数
     * @return
     */

    List<ProcessListQueryItemBean> list(@Param("billId") String billId, @Param("title") String title, @Param("startDate") String startDate,
                                        @Param("endDate") String endDate, @Param("typeFlag_1") String typeFlag_1, @Param("typeFlag_2") String typeFlag_2,
                                        @Param("typeFlag_3") String typeFlag_3, @Param("typeFlag_4") String typeFlag_4, @Param("typeFlag_5") String typeFlag_5,
                                        @Param("status_1") Integer status_1, @Param("status_2") Integer status_2, @Param("operator") String operator,
                                        @Param("page") Integer page, @Param("pageSize") Integer pageSize);

    /**
     * 统计 工作流列表
     *
     * @param secret      RSA(时间戳+应用appCode，流程平台密钥)
     * @param setCode     流程组编号，为空查所有组的流程
     * @param processCode 工作流模板编号，为空查所有类型流程
     * @param billId      业务单据编号，为空查所有单据
     * @param title       标题，不为空模糊搜索
     * @param startDate   开始日期
     * @param endDate     结束日期
     * @param typeFlag_1  1我发起的
     * @param typeFlag_2  2我待审的
     * @param typeFlag_3  3参与的
     * @param typeFlag_4  4我已沟通的
     * @param typeFlag_5  5我已办的
     * @param status_1    状态：1未结束
     * @param status_2    状态：2已结束
     * @param operator    操作人登陆帐号
     * @return
     */
    Integer countList(@Param("secret") String secret, @Param("setCode") String setCode, @Param("processCode") String processCode,
                      @Param("billId") String billId, @Param("title") String title, @Param("startDate") String startDate,
                      @Param("endDate") String endDate, @Param("typeFlag_1") String typeFlag_1, @Param("typeFlag_2") String typeFlag_2,
                      @Param("typeFlag_3") String typeFlag_3, @Param("typeFlag_4") String typeFlag_4, @Param("typeFlag_5") String typeFlag_5,
                      @Param("status_1") Integer status_1, @Param("status_2") Integer status_2, @Param("operator") String operator);

}